package com.bto.solar.work.service;

import com.bto.solar.work.constant.Constants;
import com.bto.solar.work.utils.NullUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Slf4j
@Service
public class BtoMenusService {
//
//    @Autowired
//    private BtoUserService btoUserService;
//
//    @Autowired
//    private IMenusService menusService;
//
//    @Autowired
//    private IRoleHasMenusService roleHasMenusService;
//
//    @Autowired
//    private IUserReviewerDutyService userReviewerDutyService;
//
//    /**
//     * 获取用户的菜单列表
//     * @param userId
//     * @return
//     */
//    public Map<String, Object> getMenusInfo (Long userId) {
//
//        if (NullUtils.isNull(userId)) {
//            throw new BizException(BizCode.PARAM_ERROR);
//        }
//
//        //获取用户信息
//        Users user = btoUserService.getUserByUserId(userId);
//        //判断用户是否存在
//        if (NullUtils.isNull(user)) {
//            throw new BizException(BizCode.USER_ABSENT_ERROR);
//        }
//
//        //查询权限信息
//        Roles role = btoUserService.getRoleByUser(user);
//        if (NullUtils.isNull(role)) {
//            throw new BizException(BizCode.PARAM_ERROR);
//        }
//
//        Map<String, Object> result = new HashMap<>();
//        List<Menus> menusList = new ArrayList<>();
//        Menus home = new Menus();
//        Menus queryBymenus = new Menus();
//        Menus queryByHome = new Menus();
//        if (Constants.SUPER_ADMIN.equals(role.getName())) {
//            // 如果是超级管理员，则拥有所有权限 company_Id == 0
//            if (Constants.COMPANY_ID_SUPER_ADMIN.equals(user.getCompanyId())) {
//                //查询菜单列表
//                menusList = menusService.getMenus(queryBymenus, Collections.emptyList());
//
//                //查询系统第一个页面
//                queryByHome.setParentId(Constants.ROOT_MENU_RARENT_ID);
//                queryByHome.setLevel(Constants.MENU_LEVEL_FIRST);
//                home = menusService.getHomeMenu(queryByHome, Collections.emptyList(), false);
//            }
//            else {
//                //查询菜单列表
//                queryBymenus.setOnlySuper(Constants.MENU_ONLY_SUPER_FALSE);
//                menusList = menusService.getMenus(queryBymenus, Collections.emptyList());
//
//                //查询系统第一个页面
//                queryByHome.setParentId(Constants.ROOT_MENU_RARENT_ID);
//                queryByHome.setLevel(Constants.MENU_LEVEL_FIRST);
//                queryByHome.setOnlySuper(Constants.MENU_ONLY_SUPER_FALSE);
//                home = menusService.getHomeMenu(queryByHome, Collections.emptyList(), false);
//            }
//        } else {
//
//            // 如果不是超级管理员，在查找相应的菜单显示
//            List<Integer> roleHasMenusList = roleHasMenusService.getMenusIdListByRoleId(role.getId());
//            //map(id, parentId)
//            Map<Integer, Integer> getMenuIdAndParentId = menusService.getMenuIdAndParentId();
//            //不管有原来的菜单列表中有没有审理菜单都进行清洗
//            this.deleteMenus(roleHasMenusList, getMenuIdAndParentId);
//
//            if (Constants.COMPANY_ID_SUPER_ADMIN.equals(user.getCompanyId())) {
//                //查询菜单列表
//                menusList = menusService.getMenus(queryBymenus, roleHasMenusList);
//                //查询系统第一个页面
//                home = menusService.getHomeMenu(queryByHome, roleHasMenusList, true);
//            } else {
//                //查询菜单列表
//                queryBymenus.setOnlySuper(Constants.MENU_ONLY_SUPER_FALSE);
//                menusList = menusService.getMenus(queryBymenus, roleHasMenusList);
//                //查询系统第一个页面
//                queryByHome.setOnlySuper(Constants.MENU_ONLY_SUPER_FALSE);
//                home = menusService.getHomeMenu(queryByHome, roleHasMenusList, true);
//            }
//
//            //获取审核员列表
//            List<Integer> reviewerDutyIdList = userReviewerDutyService.getReviewerDutyIdByUserId(user.getId());
//            if (CollectionUtil.isNotEmpty(reviewerDutyIdList)) {
//                //如果有审核列表
//                Set<Integer> insertMenuIdSet =  this.insertMenus(getMenuIdAndParentId, reviewerDutyIdList);
//                List<Integer> insertMenuIdList = new ArrayList<>(insertMenuIdSet);
//                Menus queryByMenusInsert = new Menus();
//                List<Menus> reviewerMenuList = menusService.getMenus(queryByMenusInsert, insertMenuIdList);
//                if (Constants.COMPANY_ID_SUPER_ADMIN.equals(user.getCompanyId())) {
//                    menusList.addAll(menusList.size() - 1, reviewerMenuList);
//                } else {
//                    menusList.addAll(reviewerMenuList);
//                }
//
//                if (NullUtils.isNull(home)) {
//                    home = menusService.getHomeMenu(queryByHome, insertMenuIdList, true);
//                }
//            }
//        }
//
//        result.put("menuInfo", menusList);
//        result.put("homeInfo", home);
//
//        return result;
//    }

//    private void deleteMenus (List<Integer> roleHasMenusList, Map<Integer, Integer> getMenuIdAndParentId) {
//        Set<Integer> deleteMenusSet = new HashSet<>();
//        //审核权限的菜单Map
//        Map<Integer, Integer> map =  Constants.getDutyIdToMenuId();
//        for (Integer key : map.keySet()) {
//            //菜单Id，比如id = 12
//            Integer id = map.get(key);
//            do {
//                //加入到删除集合中，把12放进去
//                deleteMenusSet.add(id);
//                //通过菜单Id找到parentId，通过12找到32
//                id = getMenuIdAndParentId.get(id);
//            } while (!Integer.valueOf("0").equals(id));
//        }
//        //清洗菜单列表
//        for (Integer key : deleteMenusSet) {
//            roleHasMenusList.removeIf(number -> number.equals(key));
//        }
//
//        //直接删除购售电合同审核
//        roleHasMenusList.removeIf(number -> number.equals(Constants.REVIEW_OF_ELECTRICITY_PURCHASE_AND_SALE_CONTRACTS));
//    }
//
//    private Set<Integer> insertMenus (Map<Integer, Integer> getMenuIdAndParentId, List<Integer> reviewerDutyIdList) {
//        Set<Integer> insertMenusSet = new HashSet<>();
//
//        for (Integer key : reviewerDutyIdList) {
//            //菜单Id，比如id = 12
//            Integer id = Constants.getDutyIdToMenuId().get(key);;
//            if (NullUtils.isNull(id)) {
//                continue;
//            }
//            do {
//                //加入到删除集合中，把12放进去
//                insertMenusSet.add(id);
//                //通过菜单Id找到parentId，通过12找到32
//                id = getMenuIdAndParentId.get(id);
//            } while (!Integer.valueOf("0").equals(id));
//        }
//
//        return insertMenusSet;
//
//
//    }

}
